import pinyin from '../lib/ChinesePY'

/**
 * 数据 按照 拼音首字母 排序 并分组
 * @param {Json} data ; 需要 排序的 数据
 * @param {String} field ；必须；排序所依据的 字段 名
 * @param {String} returnType ；非必须；默认返回数组, 返回结果类型【array/object】
 * @return {Json} ; 例如：{A:[{},{}],B:[{},{}],C:[{}],#:[]}
 */
export const dataLetterSort = (data, field, returnType = 'array') => {
  const letter_reg = /^[A-Z]$/;
  const list = [];
  for (var i = 0; i < data.length; i++) {
    // 添加 # 分组，用来 存放 首字母不能 转为 大写英文的 数据
    list['#'] = [];
    // 首字母 转 大写英文
    let letter = (pinyin.GetHP(data[i][field])).substr(0, 1).toUpperCase();
    // 是否 大写 英文 字母
    if (!letter_reg.test(letter)) {
      letter = '#';
    }
    // 创建 字母 分组
    if (!(letter in list)) {
      list[letter] = [];
    }
    // 字母 分组 添加 数据
    list[letter].push(data[i]);
  }
  // 转换 格式 进行 排序；
  const result = [];
  for (var key in list) {
    if (list[key].length > 0) {
      result.push({
        letter: key,
        data: list[key]
      });
    }
  }
  result.sort(function(x, y) {
    return x.letter.charCodeAt(0) - y.letter.charCodeAt(0);
  });
  // # 号分组 放最后
  /*const last_arr = result[0];
    result.splice(0, 1);
    if (last_arr.length > 0) {
      result.unshift(last_arr);
    }*/
  if (returnType == 'array') {
    return result
  }
  // 转换 数据 格式
  const json_sort = {}
  for (let i = 0; i < result.length; i++) {
    json_sort[result[i].letter] = result[i].data;
  }
  return json_sort;
}
